﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SqlDataAccess;
using IP.Core.IPCommon;

namespace QuanLyBanHang.GiaoDich
{
    public partial class F220_Hoa_don_ban : Form
    {
        public F220_Hoa_don_ban()
        {
            InitializeComponent();
            set_define_events();
        }

        #region Members
        BKIQuanLyBanHangEntities db = new BKIQuanLyBanHangEntities();
        string m_str_sua_chi_tiet_giao_dich = "Lưu thông tin";
        string m_str_them_chi_tiet_giao_dich = "Thêm sản phẩm";
        #endregion

        #region Private Methods

        private bool check_validate_data_chi_tiet_hoa_don_is_ok()
        {
            if (!CIPConvert.is_valid_number(m_txt_don_gia.Text))
            {
                MessageBox.Show("Bạn phải nhập Số!", "Thông báo");
                m_txt_don_gia.Focus();
                return false;
            }
            if (!CIPConvert.is_valid_number(m_txt_so_luong.Text))
            {
                MessageBox.Show("Bạn phải nhập Số!", "Thông báo");
                m_txt_so_luong.Focus();
                return false;
            }

            return true;
        }

        private string genMaHoaDon()
        {
            string v_str_result = "";
            v_str_result = "HDB-" + m_dtp_ngay_nhap.Value.ToString("yyyy-MM-dd") + "-" + DateTime.Now.ToString("HH'-'mm'-'ss") + "-" + DateTime.Now.Millisecond;
            return v_str_result;
        }

        private void load_data_to_listbox_san_pham()
        {
            var v_lst_san_pham = db.DM_SAN_PHAM
                .Where(x => x.MA_SAN_PHAM.Contains(m_txt_loc_san_pham.Text)
                            || x.TEN_SAN_PHAM.Contains(m_txt_loc_san_pham.Text)
                            || m_txt_loc_san_pham.Text.Equals(""))
                .Select(x => new
                {
                    ID = x.ID,
                    TEN_SAN_PHAM = x.TEN_SAN_PHAM
                })
                .ToList();
            m_lsb_san_pham.ValueMember = "ID";
            m_lsb_san_pham.DisplayMember = "TEN_SAN_PHAM";
            m_lsb_san_pham.DataSource = v_lst_san_pham;
        }

        private void load_data_to_listbox_hoa_don()
        {
            var v_lst_gd_hoa_don = db.GD_HOA_DON_BAN
                .Where(x => x.MA_HOA_DON_BAN.Contains(m_txt_loc_hoa_don.Text)
                            || x.MO_TA.Contains(m_txt_loc_hoa_don.Text)
                            || m_txt_loc_hoa_don.Text.Equals(""))
                .OrderByDescending(x => x.MA_HOA_DON_BAN)
                .ToList();
            if (v_lst_gd_hoa_don == null)
            {
                m_lsb_hoa_don.ValueMember = "ID";
                m_lsb_hoa_don.DisplayMember = "TEN_HOA_DON";
                m_lsb_hoa_don.DataSource = null;
            }
            else
            {
                var v_lst_hoa_don = v_lst_gd_hoa_don
                        .Select(x => new
                        {
                            ID = x.ID,
                            TEN_HOA_DON = x.MA_HOA_DON_BAN
                        })
                        .ToList();
                m_lsb_hoa_don.ValueMember = "ID";
                m_lsb_hoa_don.DisplayMember = "TEN_HOA_DON";
                m_lsb_hoa_don.DataSource = v_lst_hoa_don;
            }
        }

        private void load_data_to_cbo_khach_hang()
        {
            var v_lst_khach_hang = db.DM_KHACH_HANG
                .Select(x => new
                {
                    ID = x.ID,
                    TEN = x.MA_KHACH_HANG + "-" + x.TEN_KHACH_HANG
                })
                .OrderBy(x => x.TEN)
                .ToList();
            m_cbo_khach_hang.DisplayMember = "TEN";
            m_cbo_khach_hang.ValueMember = "ID";
            m_cbo_khach_hang.DataSource = v_lst_khach_hang;
        }

        private void load_data_to_grid_chi_tiet_hoa_don()
        {
            //Lấy dữ liệu của bảng GD_CHI_TIET... lên lưới
            decimal v_dc_id_hoa_don = Convert.ToDecimal(m_lsb_hoa_don.SelectedValue);
            
            List<GD_CT_HOA_DON_BAN> v_lst_gd_chi_tiet = db.GD_CT_HOA_DON_BAN
                                    .Where(x => x.ID_HOA_DON_BAN == v_dc_id_hoa_don)
                                    .ToList();
            var v_lst_san_pham = v_lst_gd_chi_tiet.Select(x => new
            {
                ID = x.ID,
                TEN_SAN_PHAM = db.DM_SAN_PHAM.FirstOrDefault(y=>y.ID==x.ID_SAN_PHAM).TEN_SAN_PHAM,
                DON_GIA_BAN = x.DON_GIA,
                SO_LUONG = x.SO_LUONG
            })
            .ToList();
            m_grv.DataSource = v_lst_san_pham;

            m_grv.Columns[0].Visible = false;
            m_grv.Columns[0].Width = 20;
            m_grv.Columns[1].HeaderText = "Sản phẩm";
            m_grv.Columns[1].Width = 180;
            m_grv.Columns[2].HeaderText = "Giá nhập";
            m_grv.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            m_grv.Columns[2].Width = 100;
            m_grv.Columns[3].HeaderText = "Số lượng";
            m_grv.Columns[3].Width = 65;
            m_grv.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

            computedMoney();
        }

        private void computedMoney()
        {
            decimal v_dc_thanh_tien = 0;
            for (int i = 0; i < m_grv.Rows.Count; i++)
            {
                v_dc_thanh_tien += CIPConvert.ToDecimal(m_grv.Rows[i].Cells[2].Value) * CIPConvert.ToDecimal(m_grv.Rows[i].Cells[3].Value);
            }
            m_txt_thanh_tien.Text = CIPConvert.ToStr(v_dc_thanh_tien, "#,###,##");
            m_txt_da_thanh_toan.Text = CIPConvert.ToStr(m_txt_da_thanh_toan.Text, "#,###,##");
            m_txt_khach_hang_no.Text = CIPConvert.ToStr(v_dc_thanh_tien 
                                        - CIPConvert.ToDecimal(m_txt_da_thanh_toan.Text), "#,###,##");
            load_data_to_computedMoney();
        }

        private void load_data_to_computedMoney()
        {
            decimal v_dc_id_hoa_don = Convert.ToDecimal(m_lsb_hoa_don.SelectedValue);
            var v_lst_hoa_don = db.GD_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_hoa_don);

            m_txt_da_thanh_toan.Text = Convert.ToString(v_lst_hoa_don.DA_THANH_TOAN);
            //m_txt_thanh_tien.Text = CIPConvert.ToStr(v_gd_hoa_don_ban.THANH_TIEN, "#,###,##");
            //m_txt_da_thanh_toan.Text = CIPConvert.ToStr(v_gd_hoa_don_ban.DA_THANH_TOAN, "#,###,##");
            //m_txt_khach_hang_no.Text = CIPConvert.ToStr(v_gd_hoa_don_ban.KHACH_HANG_NO, "#,###,##");
        }

        private void set_define_events()
        {
            this.Load += F220_Hoa_don_ban_Load;
            this.m_cmd_luu_hoa_don.Click += m_cmd_luu_hoa_don_Click;
            this.m_txt_loc_hoa_don.TextChanged += m_txt_loc_hoa_don_TextChanged;
            this.m_txt_loc_san_pham.TextChanged += m_txt_loc_san_pham_TextChanged;
            this.m_txt_da_thanh_toan.TextChanged += m_txt_da_thanh_toan_TextChanged;
            this.m_lsb_hoa_don.SelectedIndexChanged += m_lsb_hoa_don_SelectedIndexChanged;
            this.m_lsb_san_pham.SelectedIndexChanged += m_lsb_san_pham_SelectedIndexChanged;
            this.m_cmd_xoa_san_pham.Click += m_cmd_xoa_san_pham_Click;
            this.m_cmd_them_san_pham.Click += m_cmd_them_san_pham_Click;
            this.m_dtp_ngay_nhap.ValueChanged += m_dtp_ngay_nhap_ValueChanged;
            this.m_cmd_chon_hoa_don_da_nhap.Click += m_cmd_chon_hoa_don_da_nhap_Click;
            this.m_cmd_nhap_hoa_don_moi.Click += m_cmd_nhap_hoa_don_moi_Click;
            this.m_cmd_chi_tiet_hoa_don.Click += m_cmd_chi_tiet_hoa_don_Click;
            this.m_cmd_xoa_hoa_don.Click += m_cmd_xoa_hoa_don_Click;
            this.m_grv.CellClick += m_grv_CellClick;
            this.m_cmd_luu_thong_tin.Click += m_cmd_luu_thong_tin_Click;
            this.m_cmd_huy_thao_tac.Click += m_cmd_huy_thao_tac_Click;
            this.m_cmd_quay_lai.Click += new System.EventHandler(this.m_cmd_quay_lai_Click);

        }

        #endregion

        #region Events

        void F220_Hoa_don_ban_Load(object sender, EventArgs e)
        {
            try
            {
                decimal v_dc_id_nhan_vien = QuanLyBanHang.HeThong.DangNhap.getIDUser();
                HT_NGUOI_SU_DUNG v_nhan_vien = db.HT_NGUOI_SU_DUNG.FirstOrDefault(x => x.ID == v_dc_id_nhan_vien);
                m_lbl_nhan_vien.Text = "Nhan vien " + v_nhan_vien.HO_TEN_NHAN_VIEN + "-" + v_nhan_vien.MA_NHAN_VIEN;

                load_data_to_listbox_hoa_don();
                m_dtp_ngay_nhap_ValueChanged(null, null);
                m_cmd_nhap_hoa_don_moi_Click(null, null);
                load_data_to_cbo_khach_hang();
                load_data_to_listbox_san_pham();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }

        void m_dtp_ngay_nhap_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                m_txt_ma_hoa_don_nhap.Text = genMaHoaDon();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }

        void m_lsb_san_pham_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //Xoá trắng thông tin về sản phầm
                m_txt_don_gia.Text = "";
                m_txt_so_luong.Text = "";

                decimal v_dc_id_san_pham = Convert.ToDecimal(m_lsb_san_pham.SelectedValue);
                //Lấy giá được cập nhật gần nhất
                var v_gd_don_gia = db.GD_DON_GIA
                    .Where(x => x.ID_SAN_PHAM == v_dc_id_san_pham)
                    .OrderByDescending(x => x.NGAY_AP_DUNG)
                    .FirstOrDefault();
                //Nếu sản phẩm này chưa được cập nhật đơn giá thì thôi, nếu có đơn giá thì gán cho textbox đơn giá
                if (v_gd_don_gia != null)
                {
                    if (v_gd_don_gia.DON_GIA_BAN != null)
                    {
                        m_txt_don_gia.Text = CIPConvert.ToStr(v_gd_don_gia.DON_GIA_BAN, "#.###,##");
                    }

                }
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_lsb_hoa_don_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                m_txt_da_thanh_toan.Text = "0";
                m_txt_thanh_tien.Text = "0";
                m_txt_khach_hang_no.Text = "0";
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }

        void m_txt_loc_san_pham_TextChanged(object sender, EventArgs e)
        {
            try
            {
                load_data_to_listbox_san_pham();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_txt_loc_hoa_don_TextChanged(object sender, EventArgs e)
        {
            try
            {
                load_data_to_listbox_hoa_don();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_txt_da_thanh_toan_TextChanged(object sender, EventArgs e)
        {
            try
            {
                computedMoney();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }

        void m_cmd_luu_hoa_don_Click(object sender, EventArgs e)
        {
            try
            {
                GD_HOA_DON_BAN v_gd_hoa_don = new GD_HOA_DON_BAN();
                v_gd_hoa_don.ID_KHACH_HANG = Convert.ToDecimal(m_cbo_khach_hang.SelectedValue);
                v_gd_hoa_don.ID_NHAN_VIEN = QuanLyBanHang.HeThong.DangNhap.getIDUser();
                v_gd_hoa_don.MA_HOA_DON_BAN = m_txt_ma_hoa_don_nhap.Text;
                v_gd_hoa_don.NGAY_BAN = m_dtp_ngay_nhap.Value;
                v_gd_hoa_don.THANH_TIEN = Convert.ToDouble(m_txt_thanh_tien.Text.Trim());
                v_gd_hoa_don.DA_THANH_TOAN = Convert.ToDouble(m_txt_da_thanh_toan.Text.Trim());
                v_gd_hoa_don.KHACH_HANG_NO = Convert.ToDouble(m_txt_khach_hang_no.Text.Trim());
                db.GD_HOA_DON_BAN.Add(v_gd_hoa_don);
                db.SaveChanges();
                //reload listbox chon hoa don
                load_data_to_listbox_hoa_don();
                m_grb_chon_hoa_don.Enabled = true;
                m_grb_nhap_hoa_don.Enabled = false;
                m_lsb_hoa_don.Text = v_gd_hoa_don.MA_HOA_DON_BAN;
                m_cmd_chi_tiet_hoa_don_Click(null, null);

            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_cmd_nhap_hoa_don_moi_Click(object sender, EventArgs e)
        {
            try
            {
                m_grb_nhap_hoa_don.Enabled = true;
                m_grb_chon_hoa_don.Enabled = false;
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_cmd_chon_hoa_don_da_nhap_Click(object sender, EventArgs e)
        {
            try
            {
                m_grb_nhap_hoa_don.Enabled = false;
                m_grb_chon_hoa_don.Enabled = true;
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_cmd_xoa_hoa_don_Click(object sender, EventArgs e)
        {
            try
            {
                //Hỏi có muốn xoá không
                if (DialogResult.Yes == MessageBox.Show("Bạn có chắc chắn muốn XOÁ HOÁ ĐƠN này và THAY ĐỔI THÔNG TIN SỐ DƯ liên quan đến hoá đơn này hay không?", "Thông báo", MessageBoxButtons.YesNo))
                {

                    decimal v_dc_id_hoa_don = CIPConvert.ToDecimal(m_lsb_hoa_don.SelectedValue);
                    var v_gd_hoa_don = db.GD_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_hoa_don);
                    var v_lst_gd_chi_tiet = db.GD_CT_HOA_DON_BAN
                        .Where(x => x.ID_HOA_DON_BAN == v_dc_id_hoa_don)
                        .ToList();
                    DateTime v_dat_tu_ngay = new DateTime(
                                                    v_gd_hoa_don.NGAY_BAN.Value.Year
                                                    , v_gd_hoa_don.NGAY_BAN.Value.Month
                                                    , v_gd_hoa_don.NGAY_BAN.Value.Day);
                    for (int i = 0; i < v_lst_gd_chi_tiet.Count; i++)
                    {
                        //Cập nhật số dư
                        Helper.SoDu.CapNhatSoDu(
                                v_lst_gd_chi_tiet[i].ID_SAN_PHAM
                                , v_dat_tu_ngay
                                , DateTime.Now.Date
                                , +CIPConvert.ToDecimal(v_lst_gd_chi_tiet[i].SO_LUONG));
                        //Xoá dữ liệu bảng GD_CHI_TIET...
                        db.GD_CT_HOA_DON_BAN.Remove(v_lst_gd_chi_tiet[i]);
                        db.SaveChanges();
                    }

                    //Xoá bảng GD_HOA_DON...
                    db.GD_HOA_DON_BAN.Remove(v_gd_hoa_don);
                    db.SaveChanges();
                    MessageBox.Show("Xoá hoá đơn thành công!", "Thông báo");
                    load_data_to_listbox_hoa_don();
                }



            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_cmd_chi_tiet_hoa_don_Click(object sender, EventArgs e)
        {
            try
            {
                load_data_to_grid_chi_tiet_hoa_don();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_cmd_them_san_pham_Click(object sender, EventArgs e)
        {
            try
            {
                if (!check_validate_data_chi_tiet_hoa_don_is_ok()) return;

                decimal v_dc_id_san_pham = Convert.ToDecimal(m_lsb_san_pham.SelectedValue);
                decimal v_dc_id_hoa_don = Convert.ToDecimal(m_lsb_hoa_don.SelectedValue);
                var v_hoa_don = db.GD_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_hoa_don);
                if (m_cmd_them_san_pham.Text.Equals(m_str_them_chi_tiet_giao_dich))
                {
                    //Thêm sản phẩm
                    GD_CT_HOA_DON_BAN v_gd_chi_tiet = new GD_CT_HOA_DON_BAN();
                    v_gd_chi_tiet.ID_HOA_DON_BAN = v_dc_id_hoa_don;
                    v_gd_chi_tiet.ID_SAN_PHAM = v_dc_id_san_pham;
                    v_gd_chi_tiet.SO_LUONG = Convert.ToInt16(m_txt_so_luong.Text.Trim());
                    v_gd_chi_tiet.DON_GIA = Convert.ToDouble(m_txt_don_gia.Text.Trim());
                    db.GD_CT_HOA_DON_BAN.Add(v_gd_chi_tiet);
                    db.SaveChanges();

                    //Cập nhật thông tin về đơn giá, Lấy giá được cập nhật gần nhất
                    var v_gd_don_gia = db.GD_DON_GIA
                        .Where(x => x.ID_SAN_PHAM == v_dc_id_san_pham)
                        .OrderByDescending(x => x.NGAY_AP_DUNG)
                        .FirstOrDefault();
                    //Nếu đơn giá nhập bằng đơn giá cũ thì thôi, nếu khác thì phải cập nhật lại đơn giá
                    if (v_gd_don_gia == null)
                    {
                        v_gd_don_gia = new GD_DON_GIA();
                        v_gd_don_gia.ID_SAN_PHAM = v_dc_id_san_pham;
                        v_gd_don_gia.DON_GIA_BAN = Convert.ToDouble(m_txt_don_gia.Text.Trim().Replace(",", "").Replace(".", ""));
                        v_gd_don_gia.NGAY_AP_DUNG = DateTime.Now.Date;
                        db.GD_DON_GIA.Add(v_gd_don_gia);
                        db.SaveChanges();
                    }
                    else if (v_gd_don_gia.DON_GIA_BAN == null)
                    {
                        v_gd_don_gia.ID_SAN_PHAM = v_dc_id_san_pham;
                        v_gd_don_gia.DON_GIA_BAN = Convert.ToDouble(m_txt_don_gia.Text.Trim().Replace(",", "").Replace(".", ""));
                        v_gd_don_gia.NGAY_AP_DUNG = DateTime.Now.Date;
                        db.SaveChanges();
                    }
                    else if (v_gd_don_gia.DON_GIA_BAN != Convert.ToDouble(m_txt_don_gia.Text))
                    {
                        v_gd_don_gia = new GD_DON_GIA();
                        v_gd_don_gia.ID_SAN_PHAM = v_dc_id_san_pham;
                        v_gd_don_gia.DON_GIA_BAN = Convert.ToDouble(m_txt_don_gia.Text.Trim().Replace(",", "").Replace(".", ""));
                        v_gd_don_gia.NGAY_AP_DUNG = DateTime.Now.Date;
                        db.GD_DON_GIA.Add(v_gd_don_gia);
                        db.SaveChanges();
                    }

                    //Cập nhật số dư
                    DateTime v_dat_tu_ngay = new DateTime(
                                                    v_hoa_don.NGAY_BAN.Value.Year
                                                    , v_hoa_don.NGAY_BAN.Value.Month
                                                    , v_hoa_don.NGAY_BAN.Value.Day);
                    Helper.SoDu.CapNhatSoDu(
                            v_dc_id_san_pham
                            , v_dat_tu_ngay
                            , DateTime.Now.Date
                            , -CIPConvert.ToDecimal(m_txt_so_luong.Text));
                }
                else if (m_cmd_them_san_pham.Text.Equals(m_str_sua_chi_tiet_giao_dich))
                {
                    //Sửa giao dịch
                    decimal v_dc_id_chi_tiet_giao_dich = CIPConvert.ToDecimal(m_grv.CurrentRow.Cells[0].Value);
                    var v_gd_chi_tiet = db.GD_CT_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_chi_tiet_giao_dich);
                    if (v_gd_chi_tiet != null)
                    {
                        DateTime v_dat_tu_ngay = new DateTime(
                                                        v_hoa_don.NGAY_BAN.Value.Year
                                                        , v_hoa_don.NGAY_BAN.Value.Month
                                                        , v_hoa_don.NGAY_BAN.Value.Day);
                        //Nếu chỉ sửa số lượng thì trừ đi chênh lệch
                        if (v_gd_chi_tiet.ID_SAN_PHAM == v_dc_id_san_pham)
                        {
                            Helper.SoDu.CapNhatSoDu(
                                v_dc_id_san_pham
                                , v_dat_tu_ngay
                                , DateTime.Now.Date
                                , +(decimal)v_gd_chi_tiet.SO_LUONG - CIPConvert.ToDecimal(m_txt_so_luong.Text));
                        }
                        else
                        {
                            //Nếu sửa sản phẩm thì phải cập nhật số dư cho 2 sản phẩm
                            //Sản phẩm cũ, số dư: trừ đi số lượng
                            Helper.SoDu.CapNhatSoDu(
                                v_gd_chi_tiet.ID_SAN_PHAM
                                , v_dat_tu_ngay
                                , DateTime.Now.Date
                                , +CIPConvert.ToDecimal(v_gd_chi_tiet.SO_LUONG));
                            //Sản phẩm mới, số dư: thêm số lượng
                            Helper.SoDu.CapNhatSoDu(
                                v_dc_id_san_pham
                                , v_dat_tu_ngay
                                , DateTime.Now.Date
                                , -CIPConvert.ToDecimal(m_txt_so_luong.Text));
                        }

                        //Sửa thông tin chi tiết hoá đơn
                        v_gd_chi_tiet.ID_HOA_DON_BAN = v_dc_id_hoa_don;
                        v_gd_chi_tiet.ID_SAN_PHAM = v_dc_id_san_pham;
                        v_gd_chi_tiet.SO_LUONG = Convert.ToInt16(m_txt_so_luong.Text.Trim());
                        v_gd_chi_tiet.DON_GIA = Convert.ToDouble(m_txt_don_gia.Text.Trim());
                        db.SaveChanges();

                    }
                }
                m_cmd_huy_thao_tac_Click(null, null);

                //reload grid chi tiet hoa don
                load_data_to_grid_chi_tiet_hoa_don();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        void m_cmd_xoa_san_pham_Click(object sender, EventArgs e)
        {
            try
            {
                decimal v_dc_id_san_pham = Convert.ToDecimal(m_grv.CurrentRow.Cells[0].Value);
                decimal v_dc_id_hoa_don = Convert.ToDecimal(m_lsb_hoa_don.SelectedValue);
                var v_hoa_don = db.GD_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_hoa_don);
                var v_gd_chi_tiet = db.GD_CT_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_san_pham);
                DateTime v_dat_tu_ngay = new DateTime(
                                                        v_hoa_don.NGAY_BAN.Value.Year
                                                        , v_hoa_don.NGAY_BAN.Value.Month
                                                        , v_hoa_don.NGAY_BAN.Value.Day);
                //Cập nhật số dư
                Helper.SoDu.CapNhatSoDu(
                                v_gd_chi_tiet.ID_SAN_PHAM
                                , v_dat_tu_ngay
                                , DateTime.Now.Date
                                , +CIPConvert.ToDecimal(v_gd_chi_tiet.SO_LUONG));
                //Xoa san pham
                if (v_gd_chi_tiet != null)
                {
                    db.GD_CT_HOA_DON_BAN.Remove(v_gd_chi_tiet);
                    db.SaveChanges();
                    //reload grid
                    m_cmd_chi_tiet_hoa_don_Click(null, null);
                }
                m_cmd_huy_thao_tac_Click(null, null);

            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        private void m_cmd_luu_thong_tin_Click(object sender, EventArgs e)
        {
            try
            {
                decimal v_dc_id_hoa_don = CIPConvert.ToDecimal(m_lsb_hoa_don.SelectedValue);
                var v_gd_hoa_don = db.GD_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_hoa_don);
                if (v_gd_hoa_don != null)
                {
                    //v_gd_hoa_don.THANH_TIEN = (double)CIPConvert.ToDecimal(m_txt_thanh_tien.Text);
                    //v_gd_hoa_don.KHACH_HANG_NO = (double)CIPConvert.ToDecimal(m_txt_khach_hang_no.Text);
                    //v_gd_hoa_don.DA_THANH_TOAN = (double)CIPConvert.ToDecimal(m_txt_da_thanh_toan.Text);
                    v_gd_hoa_don.THANH_TIEN = Convert.ToDouble(m_txt_thanh_tien.Text);
                    v_gd_hoa_don.KHACH_HANG_NO = Convert.ToDouble(m_txt_khach_hang_no.Text);
                    v_gd_hoa_don.DA_THANH_TOAN = Convert.ToDouble(m_txt_da_thanh_toan.Text);

                    var v_gd_hoa_don_ban = db.GD_CT_HOA_DON_BAN.FirstOrDefault(x => x.ID_HOA_DON_BAN == v_dc_id_hoa_don);
                    GD_SO_DU v_gd_so_du = new GD_SO_DU();
                    if (v_gd_hoa_don_ban != null)
                    {
                        v_gd_so_du.SO_LUONG = v_gd_so_du.SO_LUONG - v_gd_hoa_don_ban.SO_LUONG;
                        if (v_gd_so_du.SO_LUONG <=0)
                        {
                            MessageBox.Show("Sản phẩm này đã hết!", "Cảnh báo!");
                            return;
                        }
                    }
                    
                }
                db.SaveChanges();
                //m_cmd_huy_thao_tac_Click(null, null);
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }
        //void m_cmd_luu_thong_tin_Click_1(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        decimal v_dc_id_hoa_don = CIPConvert.ToDecimal(m_lsb_hoa_don.SelectedValue);
        //        var v_gd_hoa_don = db.GD_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_hoa_don);
        //        if (v_gd_hoa_don != null)
        //        {
        //            v_gd_hoa_don.THANH_TIEN = (double)CIPConvert.ToDecimal(m_txt_thanh_tien.Text);
        //            v_gd_hoa_don.KHACH_HANG_NO = (double)CIPConvert.ToDecimal(m_txt_khach_hang_no.Text);
        //            v_gd_hoa_don.DA_THANH_TOAN = (double)CIPConvert.ToDecimal(m_txt_da_thanh_toan.Text);
        //        }
        //        m_cmd_huy_thao_tac_Click(null, null);
        //    }
        //    catch (Exception v_e)
        //    {
        //        MessageBox.Show(v_e.ToString());
        //    }
        //}
        void m_cmd_huy_thao_tac_Click(object sender, EventArgs e)
        {
            m_cmd_them_san_pham.Text = m_str_them_chi_tiet_giao_dich;
            m_cmd_huy_thao_tac.Visible = false;
            //m_txt_don_gia.Text = "0";
            m_txt_so_luong.Text = "0";
        }

        void m_grv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (m_grv.CurrentRow != null)
                {
                    decimal v_dc_id_giao_dich = CIPConvert.ToDecimal(m_grv.CurrentRow.Cells[0].Value);
                    var v_gd_giao_dich = db.GD_CT_HOA_DON_BAN.FirstOrDefault(x => x.ID == v_dc_id_giao_dich);
                    if (v_gd_giao_dich != null)
                    {
                        m_lsb_san_pham.Text = v_gd_giao_dich.DM_SAN_PHAM.TEN_SAN_PHAM;
                        m_txt_don_gia.Text = CIPConvert.ToStr(v_gd_giao_dich.DON_GIA, "#,###,##");
                        m_txt_so_luong.Text = v_gd_giao_dich.SO_LUONG.ToString();
                        m_cmd_them_san_pham.Text = m_str_sua_chi_tiet_giao_dich;
                        m_cmd_huy_thao_tac.Visible = true;
                    }
                }
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }

        private void m_cmd_quay_lai_Click(object sender, EventArgs e)
        {
            try
            {
                this.Close();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
        }

        #endregion

    }
}
